package com.songcha.sakura.download.m3u8

import android.os.Parcel
import android.os.Parcelable
import java.net.MalformedURLException
import java.net.URL

class M3u8UrlConverter() : IM3u8UrlConverter, Parcelable {
    constructor(parcel: Parcel) : this() {
    }

    override fun convert(m3u8Url: String, bandWidthUrl: String):String{
        //LogUtil.INSTANCE.log("m3u8Url:" + m3u8Url);
        //LogUtil.INSTANCE.log("bandWidthUrl:" + bandWidthUrl);

        //m3u8Url:第一个m3u8，连接到下一个m3u8
        //bandWidthUrl:第二个m3u8，包含不同码率的ts视频
        /*第二个m3u8有些文件带有全路径，如：http://xxxx.xxx.com/xxx
         *有些没有，如：/20210927/3oCoCiM4/hls/index.m3u8
         *因此需要区分，区分规则如下：
         * 如果包含有http或者https，一定是全路径，直接访问
         * 如果没有则是用域名+第二个文件路径，如：(域名)http://xxxx.xxx.com/20210927/3oCoCiM4/hls/index.m3u8(路径)
         */

        //LogUtil.INSTANCE.log("m3u8Url:" + m3u8Url);
        //LogUtil.INSTANCE.log("bandWidthUrl:" + bandWidthUrl);

        //m3u8Url:第一个m3u8，连接到下一个m3u8
        //bandWidthUrl:第二个m3u8，包含不同码率的ts视频
        /*第二个m3u8有些文件带有全路径，如：http://xxxx.xxx.com/xxx
         *有些没有，如：/20210927/3oCoCiM4/hls/index.m3u8
         *因此需要区分，区分规则如下：
         * 如果包含有http或者https，一定是全路径，直接访问
         * 如果没有则是用域名+第二个文件路径，如：(域名)http://xxxx.xxx.com/20210927/3oCoCiM4/hls/index.m3u8(路径)
         */return if (bandWidthUrl.contains("http://") || bandWidthUrl.contains("https://")) {
            bandWidthUrl
        } else {
            //获取域名
            var url: URL? = null
            url = try {
                URL(m3u8Url)
            } catch (e: MalformedURLException) {
                throw RuntimeException(e)
            }
            val host = url!!.protocol + "://" + url!!.getHost() //+ ":" + url.getDefaultPort();
            //判断是否包含重复路径
            //String repeat=bandWidthUrl.substring(0, bandWidthUrl.lastIndexOf("/")+1);
            var repeat = m3u8Url.replace(host, "")
            repeat = repeat.substring(0, repeat.lastIndexOf("/") + 1)
            if (repeat != "" && bandWidthUrl.contains(repeat)) {
                if (bandWidthUrl.startsWith("/")) host + bandWidthUrl else "$host/$bandWidthUrl"
            } else {
                val str = m3u8Url.substring(0, m3u8Url.lastIndexOf("/"))
                if (bandWidthUrl.startsWith("/")) str + bandWidthUrl else "$str/$bandWidthUrl"
            }
        }
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {

    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<M3u8UrlConverter> {
        override fun createFromParcel(parcel: Parcel): M3u8UrlConverter {
            return M3u8UrlConverter(parcel)
        }

        override fun newArray(size: Int): Array<M3u8UrlConverter?> {
            return arrayOfNulls(size)
        }
    }

}